package com.dream.controller;

import com.dream.bean.Book;
import com.dream.bean.Page;
import com.dream.service.BookService;
import com.dream.utils.WebUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;

/**
 * @author 匠人码农
 * @date 2020/12/06 11:35
 * 概要：
 *     图书模块
 */
@RequestMapping("/book")
@Controller
public class BookController {

    /**
     * 重定向前缀
     */
    private static final String REDIRECT = "redirect:";

    /**
     * 首页分页页面
     */
    private static final String CLIENT_PAGE = "/client/page";

    /**
     * 图书分页
     */
    private static final String BOOK_PAGE = "/book/page";
    /**
     * 图书编辑页面
     */
    private static final String BOOK_EDIT = "/manager/book_edit";

    /**
     * 图书管理页面
     */
    private static final String BOOK_MANAGER = "/manager/book_manager";

    @Autowired
    BookService bookService;

    /**
     *
     * @param pageNoStr   当前页码（字符串）
     * @param book        图书信息
     * @return            显示分页
     */
    @RequestMapping("/add")
    protected String add(@RequestParam(value="pageNo") String pageNoStr, Book book){

        //书籍后显示到最后一页
        // 获取当前页码
        int pageNo = WebUtils.parseInt(pageNoStr,0);

        // 当前页码 + 1
        pageNo+=1;

        //执行Service的添加书籍
        bookService.addBook(book);

        //跳转到图书列表页面
        //SpringMVC默认是请求转发方式 下面是使用重定向的一种方式。
        return String.format("%s%s?pageNo=%d", REDIRECT, CLIENT_PAGE, pageNo);

    }

    /**
     * 修改图书信息
     * @param pageNoStr    当前页码（字符串类型）
     * @param book         修改的图书信息
     * @return             列表一览画面
     */
    @RequestMapping("/update")
    protected String update(@RequestParam(value="pageNo")  String pageNoStr,Book book){

        //获取pageNo
        int pageNo = WebUtils.parseInt(pageNoStr,1);

        //调用service的更新处理
        bookService.updateBookById(book);

        //跳转到列表一览画面
        return String.format("%s%s?pageNo=%d", REDIRECT, BOOK_PAGE, pageNo);

    }

    /**
     * 删除图书
     * @param pageNoStr 当前页码
     * @param id        图书ID
     * @return          删除图书后页面
     */
    @RequestMapping("/delete")
    protected String delete(@RequestParam(value="pageNo") String pageNoStr,@RequestParam(value="id") String id) {

        //获取pageNo
        int pageNo = WebUtils.parseInt(pageNoStr,1);

        //调用service删除图书功能
        bookService.deleteBookById(Integer.parseInt(id));

        //响应重定向到删除页本页
        return String.format("%s%s?pageNo=%d", REDIRECT, BOOK_PAGE, pageNo);
    }

    /**
     * 通过Id查询图书信息
     * @param idStr  图书ID
     * @param model  model
     * @return       图书编辑页面
     */
    @RequestMapping("/queryBook")
    protected String queryBook(@RequestParam(value="id") String idStr, Model model) {

        //获取图书ID值
        int id = WebUtils.parseInt(idStr,1);

        //执行查询操作
        Book book = bookService.queryBookById(id);

        //回传数据
        model.addAttribute("book",book);

        //跳转到图书编辑页面
        return BOOK_EDIT;

    }

    /**
     * 图书管理页面分页
     * @param req           请求
     * @param model         model
     * @return              图书管理一览页面分页
     */
    @RequestMapping("/page")
    protected String page(HttpServletRequest req, Model model) {
        //获取pageNo和pageSize参数
        int pageNo = WebUtils.parseInt(req.getParameter("pageNo"),1);
        int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);

        //调用service
        Page<Book> page = bookService.page(pageNo,pageSize);

        //设置分页条的url地址
        page.setUrl("book/page");

        //回传数据
        model.addAttribute("page",page);

        //返回图书管理页面
        return BOOK_MANAGER;

    }
}
